home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1992-02-26 | 5.3 KB | 226 lines |
- '****************************************************************************'
- '* AMOS MED Module Player *
- '* Copyright (c) 1992 by Michael David Cox *
- '* March 22, 1992 11:47am CST *
- '****************************************************************************
- Break Off
- Screen Open 0,640,400,2,Hires
- Curs Off : Flash Off
- Led On
- _SMALL_COPYRIGHT[225]
- Fade 1 : Wait 16
- Auto View Off : Unpack 6 To 0 : Screen Clone 1 : Screen To Front 0
- For C=0 To 31
- Colour C,0
- Next
- View : Auto View On
- Curs Off : Flash Off
- Fade 3 To 1 : Screen Close 1
- Wait 250 : ERASBANK
- '***************************************************
- MED_PLAYER_OFFSETS:
- FRE_PLAYER=-$24
- GT_PLAYER=-$1E
- PLY_MODULE=-$2A
- CONT_MODULE=-$30
- ST0P_PLAYER=-$36
- DM_OFF_PLAYER=-$3C
- SET_TEMPO=-$42
- L0AD_MODULE=-$48
- UNL0AD_MODULE=-$4E
- GT_CURRENT_MODULE=-$54
- RESET_MIDI=-$5A
- '****************************************************
- EXEC_LIB_OFFSETS:
- OPEN_LIBRARY=-$228
- CL0SE_LIBRARY=-$19E
- '****************************************************
- OPENLIBRARY
- BEGINNING:
- M0DULE$=Fsel$("*.MED","","Load a 4-channel","MED Module")
- If M0DULE$=""
- CL0SELIBRARY
- For HEYBER=9 To 15
- Erase HEYBER
- Next HEYBER
- Run "autoexec.amos"
- End If
- If Not Exist(M0DULE$)
- Locate 0,24
- Centre "Song does not exist. Press any key to retry."
- Wait Key
- Locate 0,24 : Cline
- Goto BEGINNING
- End If
- M0DULE$=M0DULE$+Chr$(0)
- Open Random 1,M0DULE$
- M0DULE_LENGTH=Lof(1)
- Close 1
- If Chip Free<M0DULE_LENGTH
- Cls
- Centre "Not enough CHIP RAM. Press any key to exit."
- Wait Key
- CL0SELIBRARY
- For HEYBER=9 To 15
- Erase HEYBER
- Next HEYBER
- Run "autoexec.amos"
- End If
- M0DULE_POINTER=Varptr(M0DULE$)
- '
- ' First, we get the MEDPlayer routine
- _GET_PLAYER[MED_LIB_POINTER]
- '
- ' Second, we load the module. We use the MED routine as the module has to
- ' be relocated in order to work properly.
- _LOAD_MODULE[MED_LIB_POINTER,M0DULE_POINTER]
- '
- '_LOAD_MODULE returns the address of where the module is loaded.
- '
- M0DULE_ADDRESS=Param
- '
- 'Now, we play the module!
- '
- _PLAY_MODULE[MED_LIB_POINTER,M0DULE_ADDRESS]
- '
- ' When the user presses a key to stop the song, we fade (dim_off) out.
- '
- _DIM_OFF_PLAYER[MED_LIB_POINTER]
- '
- 'We now turn the Player off completely.
- '
- _STOP_PLAYER[MED_LIB_POINTER]
- '
- ' Clear the module out of memory.
- '
- _UNLOAD_MODULE[MED_LIB_POINTER,M0DULE_ADDRESS]
- '
- ' Clear the player from memory
- '
- _FREE_PLAYER[MED_LIB_POINTER]
- '
- ' That's all there is to it....Now, go back to the module selector...
- '
- Goto BEGINNING
- '**************************************************************
- '* Procedures *
- '**************************************************************
- Procedure CL0SELIBRARY
- Shared MED_LIB_POINTER,CL0SE_LIBRARY
- Areg(1)=MED_LIB_POINTER
- R=Execall(CL0SE_LIBRARY)
- Fade 3 : Wait 45
- ERASBANK
- End Proc
- Procedure ERASBANK
- Erase 6 : Erase 1
- End Proc
- Procedure OPENLIBRARY
- Shared OPEN_LIBRARY,MED_LIB_POINTER
- LIB_NAME$="medplayer.library"+Chr$(0)
- Areg(1)=Varptr(LIB_NAME$)
- Dreg(0)=0
- R=Execall(OPEN_LIBRARY)
- If R=0
- Cls
- Centre "Library opening failed. Press any key to exit"
- Wait Key : ERASBANK
- For HEYBER=9 To 15
- Erase HEYBER
- Next HEYBER
- Run "autoexec.amos"
- Else
- MED_LIB_POINTER=R
- End If
- End Proc
- Procedure _SMALL_COPYRIGHT[YDISPLAY]
- '
- Auto View Off
- '
- Screen Open 7,320,24,16,0 : Curs Off : Flash Off : Cls 0
- Screen Display 7,,-100,,
- Paste Bob 260,3,1
- Paper 0 : Pen 7 : Print At(1,1);"This program was written using"
- Get Sprite Palette
- View : Wait Vbl
- '
- For Y=1 To Screen Height/2
- Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
- Screen Offset 7,,Screen Height/2-Y
- View : Wait Vbl
- Next
- '
- Wait 100
- '
- For Y=Screen Height/2 To 0 Step -1
- Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2
- Screen Offset 7,,Screen Height/2-Y
- View : Wait Vbl
- Next
- '
- Screen Close 7
- Auto View On
- '
- End Proc
- Procedure _GET_PLAYER[LIB_POINTER]
- Dreg(0)=0
- Areg(2)=LIB_POINTER
- Call 9
- R=Dreg(0)
- If R<>0
- Cls
- Centre "GetPlayer Failed. Press any key to exit"
- Wait Key
- CL0SELIBRARY
- For HEYBER=9 To 15
- Erase HEYBER
- Next HEYBER
- Run "autoexec.amos"
- End If
- End Proc
- Procedure _LOAD_MODULE[LIB_POINTER,M0D_POINTER]
- Areg(0)=M0D_POINTER
- Areg(1)=M0D_POINTER
- Areg(2)=LIB_POINTER
- Call 13
- M0D_ADDRESS=Dreg(0)
- If M0D_ADDRESS=0
- Cls
- Centre "Failed to load module. Press any key to try again."
- Wait Key
- _FREE_PLAYER[MED_LIB_POINTER]
- End If
- End Proc[M0D_ADDRESS]
- Procedure _DIM_OFF_PLAYER[LIB_POINTER]
- Areg(2)=LIB_POINTER
- Dreg(1)=60
- Dreg(0)=60
- Call 15
- Timer=0
- Repeat
- Until Timer>582
- End Proc
- Procedure _PLAY_MODULE[LIB_POINTER,M0D_ADDRESS]
- Areg(2)=LIB_POINTER
- Areg(1)=M0D_ADDRESS
- Areg(0)=M0D_ADDRESS
- Call 10
- Locate 0,24
- Centre "Press key to stop song"
- Wait Key
- End Proc
- Procedure _STOP_PLAYER[LIB_POINTER]
- Areg(2)=LIB_POINTER
- Call 11
- End Proc
- Procedure _UNLOAD_MODULE[LIB_POINTER,M0D_ADDRESS]
- Areg(0)=M0D_ADDRESS
- Areg(1)=M0D_ADDRESS
- Areg(2)=LIB_POINTER
- Call 14
- End Proc
- Procedure _FREE_PLAYER[LIB_POINTER]
- Areg(2)=LIB_POINTER
- Call 12
- Led On : Cline
- End Proc